#ifndef __CCMS_NR_TYPES_H__
#define __CCMS_NR_TYPES_H__

/**
 * @file ccms/nr/types.h
 *
 * Common types definitions.
 */

namespace ccms {
namespace nr {

/**
 * CpuUsageMode enumerator, identifies a particular CPU usage mode (type).
 *
 * For more information see man 5 proc, /proc/stat section.
 */
typedef enum {
    CPU_USAGE_MODE_USER = 0, /**< user mode */
    CPU_USAGE_MODE_NICE,     /**< user mode with low priority (nice) mode */
    CPU_USAGE_MODE_SYSTEM,   /**< system mode */
    CPU_USAGE_MODE_IDLE,     /**< idle mode */
    CPU_USAGE_MODE_IOWAIT,   /**< iowait mode */
    CPU_USAGE_MODE_IRQ,      /**< irq mode */
    CPU_USAGE_MODE_SOFTIRQ,  /**< softirq mode */
    CPU_USAGE_MODE_STEAL,    /**< steal mode */
    CPU_USAGE_MODE_GUEST     /**< guest mode */
} CpuUsageMode;

/**
 * MemUsageMode enumerator, identifies a particular memory usage mode (type).
 *
 * For more information see man 5 proc.
 */
typedef enum {
    MEM_USAGE_MODE_PHYS_TOTAL = 0, /**< total physical memory mode */
    MEM_USAGE_MODE_PHYS_FREE,      /**< free physical memory mode */
    MEM_USAGE_MODE_PHYS_BUFFERS,   /**< physical memory used as system buffers mode */
    MEM_USAGE_MODE_PHYS_CACHED,    /**< physical memory used as system cache mode */
    MEM_USAGE_MODE_PHYS_USED,      /**< physical memory allocated by processes running within the system mode */
    MEM_USAGE_MODE_SWAP_TOTAL,     /**< total swap memory mode */
    MEM_USAGE_MODE_SWAP_FREE,      /**< free swap memory mode */
    MEM_USAGE_MODE_SWAP_USED       /**< used swap memory mode */
} MemUsageMode;

} // namespace nr
} // namespace ccms

#endif /* __CCMS_NR_TYPES_H__ */
